자바스크립트 접근 제어자
❓질문
자바스크립트 클래스의 접근제어자에 대한 설명해주세요.
💡 조사하기전 내가 알고 있던 내용
이건 자바 배울때 배웠었던 개념인데 어떠한 환경에서 이 클래스,생성자에 접근이 가능한지를 명시하는것을 접근제어자라고 한다
종류에는 Public
,Protected
, Private
가 있고 각 외부 클래스에서 자유롭게 접근 가능 , 같은 패키지 또는 자식 클래스에서 접근 가능 , 외부에서 사용불가능 입니다.
자바는 아무것도 안붙히면 프로텍티드와 프라이빗 사이에 들어가는것으로 알고있는데 자바스크립트는 아무것도 안붙힌 클래스는 퍼블릭으로 접근제어자를 가지는 것으로 알고있습니다.
🏫 정리한 내용
Public
은 별도 키워드를 붙이지 않았을때 기본 적용되는 접근제어자로, 클래스 외부에서도 자유롭게 접근 가능합니다. 예를 들어, this.name = "john"
처럼 선언된 멤버는 Public으로 간주됩니다. 이는 클래스 외부에서 객체를 통해 직접 접근할 수 있습니다.
Private
은 멤버 앞에 #
키워드를 붙여 작용하는 접근제어자로, 클래스 내부에서만 접근 가능하게 됩니다. 예를 들어, this.#secret = "hidden"
처럼 선언된 멤버는 Private으로 간주됩니다. Private 멤버는 객체를 통한 외부 접근이 불가능하며, 상속받은 클래스에서도 사용할 수 없게 됩니다.
Protected
는 자바스크립트 언어 차원에서 지원하지 않지만, 관습적으로 _
를 접두어로 사용해 개발자 간 약속으로 처리합니다. 예를 들어 this._secret = "hidden"
과 같은 방식으로 선언하여 Protected임을 나타냅니다. 이는 상속받은 클래스에서 접근하는 것은 허용하지만 클래스 외부에서는 사용하지 말라는 의미를 나타냅니다. 즉, 클래스 외부에서 객체를 통한 접근은 하지않을 것을 개발자들 간에 약속하는 것입니다. 이는 언어 차원의 강제성은 없습니다.
이를 잘 활용하면 코드의 캡슐화를 통해 데이터 보호와 유지보수를 향상시킬 수 있습니다.
단 타입스크립트에서는 자바스크립트에서 지원하지 않는 접근제어자 키워드들을 제공하기 때문에 더욱 명시적인 방식으로 접근 제어자를 선언할 수 있습니다.
class Foo {
public a : string;
private b : number;
protected c : boolean;
constructor(a: string, b: number, c: boolean) {
this.a = a;
this.b = b;
this.c = c;
}
}
추가로 타입스크립트는 Parameter Properties
기능을 제공을 하기때문에 위 코드를
class Foo {
constructor(public a: string, private b: number, protected c: boolean) {
// 이 부분을 채우지 않아도 자동으로 멤버 선언 및 초기화
}
}
이렇게 줄일 수 있습니다.